package main

import (
	"fmt"
	"os"
)

func main() {
	if len(os.Args) < 2 {
		RunScraper()
		RunBacktest()
		return
	}

	command := os.Args[1]

	switch command {
	case "scrape":
		RunScraper()
	case "backtest":
		RunBacktest()
	default:
		fmt.Printf("未知命令: %s\n", command)
		fmt.Println("可用命令: scrape, backtest")
	}
}

// RunBacktest 运行回测主函数
func RunBacktest() {
	// 加载配置
	config := DefaultConfig()

	// 打印配置信息
	config.PrintConfig()

	fmt.Println("\n" + repeatStr("=", 60))
	fmt.Println("ETF轮动策略回测系统")
	modeName := "周线模式（每周调仓）"
	if config.RebalanceMode == "daily" {
		modeName = "日线模式（每日调仓，基于近15天和20天动量）"
	}
	fmt.Printf("模式: %s\n", modeName)
	fmt.Println("策略: 分别根据短期和长期动量选出最强标的")
	fmt.Println("      如果是同一个则100%，否则各50%")
	fmt.Println("      如果涨幅均小于阈值则空仓")
	fmt.Println(repeatStr("=", 60))

	strategy := NewETFRotationStrategy(config)

	// 加载数据
	if err := strategy.LoadData(); err != nil {
		fmt.Printf("错误: %v\n", err)
		return
	}

	// 计算动量
	strategy.CalculateMomentum()

	// 运行回测
	strategy.RunBacktest(config.InitialCapital)

	// 计算指标
	strategy.CalculateMetrics()

	// 绘制收益曲线
	if err := strategy.PlotEquityCurve(config.ChartFile); err != nil {
		fmt.Printf("绘图错误: %v\n", err)
	}

	// 保存结果
	if err := strategy.SaveResults(config.ResultFile); err != nil {
		fmt.Printf("保存错误: %v\n", err)
	}

	fmt.Println("\n所有任务完成！")
}

func repeatStr(s string, count int) string {
	result := ""
	for i := 0; i < count; i++ {
		result += s
	}
	return result
}
